<?php
	require_once 'Model/LoginHandler.php';
	require_once 'Model/Database.php';
	require_once 'Model/dbsettings.php';
	require_once 'Model/RegisterHandler.php';
	require_once 'Model/FileUploadHandler.php';
	require_once 'View/Validation.php';
	
	
	class Test{
		
		// Funktion för test av loginfunktionallitet
	public function LoginTest(){
		
		
		$Database = new \Model\Database();
		$dbsettings = new \Model\dbsettings();
		$Database->Connect($dbsettings);	
		$LoginHandler = new \Model\LoginHandler($Database);	
		
		$LoginTester = array();
		
		// Försätter mig i utloggat läge
		$LoginHandler->DoLogout();
			
		// Kontrollerar så att jag är utloggad
		if ($LoginHandler->Isloggedin()){
			$LoginTester[] = new Exception( "Fel, bör vara utloggad");
		}
		
		// Provar att logga in med uppgifter som stämmer
		if($LoginHandler->Dologin("demo2", "qwerty") == false){
			$LoginTester[] = new Exception( "Fel i dologin, kunde inte logga in");
		}
				
		// Kontrollerar så att jag är inloggad		
		if ($LoginHandler->Isloggedin() == false){
			$LoginTester[] = new Exception( "Fel, bör vara inloggad");
		}

		// Kontrollerar så att användaren inte är administratör
		if ($LoginHandler->IsSuperUser() == true){
			$LoginTester[] = new Exception( "Fel, användaren ska inte ha så mycket rättigheter");
		}
		
		// Försätter mig i utloggat läge
		$LoginHandler->DoLogout();
		
		// Kontrollerar så att jag är utloggad
		if ($LoginHandler->Isloggedin()){
			$LoginTester[] = new Exception( "Fel, bör vara utloggad");
		}
		
		// Provar att logga in med felaktiga uppgifter
		if($LoginHandler->Dologin("finnsej", "idatabasen") == true){
			$LoginTester[] = new Exception( "Fel i dologin, borde inte kunna logga in");
		}
		
		// Kontrollerar så att jag är utloggad
		if ($LoginHandler->Isloggedin()){
			$LoginTester[] = new Exception( "Fel, bör vara utloggad");
		}
		
		
		return $LoginTester;		
	}
	
	
	// Funktion för test av registreringsfunktionallitet
	public function RegisterTest(){		
			
		$Database = new \Model\Database();
		$dbsettings = new \Model\dbsettings();
		$Validation = new \View\Validation();
		$Database->Connect($dbsettings);
		$RegisterHandler = new \Model\RegisterHandler($Database);
		
		$registertester = array();
		
		// Kontrollerar om en användare finns i databasen
		if ($RegisterHandler->DoesUserExist("Leonard") == false){
			$registertester[] = new Exception( "Användarnamet hittas inte i databasen, logiken är sönder");
		}
		
		// Kontrollerar om det går att registrera en ny användare med ett för kort lösenord
		if($RegisterHandler->RegisterUser("testnamn", "kort") == true){
			$registertester[] = new Exception( "Lösenordet borde vara för kort");
		}
		
		// Försöker att registrera en ny användare med korrekta uppgifter
		if($RegisterHandler->RegisterUser("testnamn", "testlosen") == false){
			$registertester[] = new Exception( "Användaren gick inte att registrera, logiken är sönder");
		}
		
		// Försöker att ta bort den avändaren som precis bör ha skapats
		if($RegisterHandler->RemoveUser("testnamn", "testlosen") == false){
			$registertester[] = new Exception( "Användaren gick inte att ta bort, logiken är sönder");
		}
		
		// Kollar så att användaren som togs bort inte finns kvar i databasen
		if ($RegisterHandler->DoesUserExist("testnamn") == true){
			$registertester[] = new Exception( "Användarnamet ska inte finnas i databasen, logiken är sönder");
		}
		
		return $registertester;
	}

	public function FileUploadTest()
	{
		$Database = new \Model\Database();
		$dbsettings = new \Model\dbsettings();
		$Database->Connect($dbsettings);
		$FileUploadHandler = new \Model\FileUploadHandler();
	}
}
?>

<!DOCTYPE html>
<html>
<head>
	<title>Tester</title>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>

<body>
<?php
$Test = new Test();

// Skapar en array där eventuella fel i från testerna kommer att läggas
$errors = $Test->LoginTest();

// Om arrayen är tom är testet lyckat
if (empty($errors)){
	echo "<h2>Test av login</h2>";
	echo "Alla logintester lyckades </br>";
}

// Annars loopas arrayen igenom och samtliga felmeddelanden skrivs ut
else{
	foreach ($errors as $value) {
		echo $value;
	}
}

// Skapar en array där eventuella fel i från testerna kommer att läggas
$errors = $Test->RegisterTest();

// Om arrayen är tom är testet lyckat
if (empty($errors)){
	echo "<h2>Test av registrering</h2>";
	echo "Alla registreringstester lyckades </br>";
}

// Annars loopas arrayen igenom och samtliga felmeddelanden skrivs ut
else{
	foreach ($errors as $value) {
		echo $value;
	}
}
?>
</body>

</html>

